// 导入api中的方法
import { getUserIdAPI, getUserInfoAPI, loginAPI } from '@/api/user'
// 导入cookie，已经提前准备好了这三个文件
import { getToken, removeToken, setToken } from '@/utils/auth'
// 导入重置路由
import { resetRouter } from '@/router'
export default {
  namespaced: true, // 开启命名空间
  state: {
    // token数据项
    token: getToken() || '', // 前面的满足就用前面的不满足就采用后面的空
    // 用户信息的数据项
    userInfo: {}
  },
  mutations: {
    // 获取到token存入vuex
    setToken(state, tokenVal) {
      state.token = tokenVal
      // 存入cookie
      setToken(tokenVal)
    },
    // 获取到用户信息存入上面的数据项
    setUserInfo(state, val) {
      state.userInfo = val
    },
    // 清空数据
    removeUserInfo(state) {
      state.token = ''
      state.userInfo = {}
      // 因为本地存储也有数据，我们也给它清空
      removeToken()
      // 重置路由
      resetRouter()
    }
  },
  actions: {
    // 请求接口
    // 第一个参数是store解构赋值出来我们只用commit，第二个参数就是api中的数据是一个对象
    async fetchLogin({ commit }, data) {
      // 调用api接口，拿到请求返回的值
      const res = await loginAPI(data)
      // 再使用commit方法传给mutations，第一个参数是mutation里的方法，第二个参数是返回值
      commit('setToken', res)
    },
    // 获取用户信息的api
    async fetchUserInfo({ commit }) {
      // 调用用户信息的接口
      const res = await getUserInfoAPI()
      // 调用头像的接口
      const resphoto = await getUserIdAPI(res.userId)
      // 提交给mutations
      // 这时我们需要把这两个接口的数据合并在一起，再存起来，利用...
      commit('setUserInfo', { ...res, ...resphoto })
      // 因为我们需要在permission中的dispatch中使用，所以return一下
      return res
    }
  }
}
